# 程序要求：
# 1. 让用户输入一个整数作为半径值
# 2. 根据半径值计算并打印圆的面积和周长
#    圆的面积计算公式：面积 = π * 半径的平方
#    圆的周长计算公式：周长 = 2 * π * 半径
# 3. 使用math模块中的pi常量来表示π的值（即 math.pi）
#    需要添加 math库

import math   ##1## 添加 math库

radius = int(input("请输入半径值: "))  ##2## 用户输入半径值,存储为整型数据

area = math.pi * radius ** 2  ##3## 计算圆的面积,按下面公式计算，面积 = π * 半径的平方
circumference = 2 * math.pi * radius  ##4## 计算圆的周长,按下面公式计算，周长 = 2 * π * 半径

print("圆的面积为:", area)  ##5## 打印圆的面积
print("圆的周长为:", circumference)  ##6## 打印圆的周长



'''
定义一个空列表numbers，用于存储用户输入的整数。
使用循环控制语句，循环8次，每次从用户输入中获取一个整数，并将其添加到numbers列表中。
定义一个变量total并赋初值为0，用于存储列表中所有整数的和。
使用循环遍历numbers列表中的每个整数，将其累加到total中。
计算所有整数的平均值，保存在变量average中。
使用格式化输出，输出average的值，保留两位小数，并居中对齐，占位长度为15。
'''

numbers = []    #定义空列表numbers
for i in range(0,8):  ##1## 循环控制语句，循环8次。
    num = int(input("请输入第"+str(i+1)+"个整数: "))       ##2## 提示用户输入一个整数,并将所输入的整数转化为整型数据。
    numbers.append(num)         ##3## 将用户输入的整数添加到列表

total = 0
for num in numbers:         ##4## 遍历列表
    total += num            ##5## 计算列表中所有整数的和

average = total / len(numbers)          ##6##求平均值

print("{:%2f}".format(average))        ##7## 输出average的值，保留两位小数，并居中对齐，占位长度为15。


'''
题目描述：
编写一个函数filter_dictionary，接收一个字典和列表作为参数，并返回一个字典，
其中包含列表中每个元素及其在列表中出现的次数。
请在下方的代码中填写5个空缺处的代码。
'''

def filter_dictionary(dictionary, keys):   ##1## 自定义函数，第一个参数为要遍历的字典，第二个参数为要遍历的列表。
    """
    根据给定列表中的键，过滤字典中的键值对，并返回一个新字典。
    """
    filtered_dict = {}  # 创建空字典
    for key, value in dictionary.items():  ##2## 遍历字典中的键值对
        if key in keys:  # 如果键在列表中出现
            filtered_dict[key] = value  ##3## 将键值对添加到新字典中
    return filtered_dict     ##4## 返回新字典


# 测试数据
data = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
keys_to_filter = ['b', 'c', 'e']

result = filter_dictionary(data,keys_to_filter)  ##5## 调用函数过滤字典,

# 打印结果
print(result)


'''
 用户输入一个字符串作为密码，判断密码强度，规则为：
 1、密码长度小于8 为“弱密码”，
 2、否则，密码长度大于等于8
     （1）且仅由 1 类字符构成为“弱密码”
     （2）且包含 2 - 3 类 字符为“中等强度密码”
     （3）且包含全部 4 类字符为“强密码”
'''
import string

#统计密码中数字、大写字母、小写字母和特殊字符存在几类，返回表示种类的整数。
def kinds_of_char(password):
    type1 = type2 = type3 = type4 = 0
    for ch in password:     ##1## 遍历密码字符串，统计其中包含几类字符
        if ch in string.digits:     ##2## 如果包含数字字符
            type1 = 1
        elif ch in string.ascii_lowercase:  ##3## 如果包含小写字母
            type2 = 1
        elif ch in string.ascii_uppercase:  ##4## 如果包含大写字母
            type3 = 1
        elif ch in string.punctuation:  # 如果包含特殊字符
            type4 = 1
    kinds = type1 + type2 + type3 + type4  # 字符种类
    return kinds     ##5## 返回字符种类数量

#根据密码和密码中字符种类，判定密码强度。
def judge_of_pass(password, kinds):
    result = ""
    if len(password) < 8:  ##6## 密码长度小于8为弱密码
        result = "弱"
    elif kinds < 2:      ##7## 仅由 1 类字符构成为“弱密码”
        result = "弱"
    elif kinds == 2 or kinds == 3: ##8## 包含 2-3 类 字符为“中等强度密码”
        result = "中"
    elif kinds == 4:
        result = "强"
    return result

pwd = input()   #用户输入密码字符串
n = kinds_of_char(pwd)        ##9## 计算密码中的字符种类数量
print(judge_of_pass(pwd,n))    ##10## 显示判断后的密码强度

